# -*- coding: utf-8 -*-
#multiprocessing模块提供了Process类代表了进程对象
#Process类参数：
#1、target：执行的目标任务名，即子进程要执行的任务
#2、args：以元组的方式传参
#3、kwargs：以字典的方式传参
#常用方法：
#1、start：启动进程
#2、is_alive：判断进程是否存活，True表示存活，False表示死亡
#3、join：主进程等待子进程执行完毕
#常用属性
#1、name：进程名称，默认Process-N，N从1开始的进程编号
#2、pid：当前进程的进程编号
#进程不共享全局变量
#进程之间的通信
#1、使用Queue队列
#q.get()：取数据
#q.put()：放数据
#q.empty()：判断队列是否为空
#q.qsize()：获取当前队列的大小
#q.full()：判断队列是否已满
from multiprocessing import Process
import os
from queue import Queue


def sing():
    #子进程获取父进程的进程ID
    print("父进程的PID：",os.getppid())
    print('sing')
def dance():
    print('dance')
# 在linux和macos中，主进程执行的代码不会进行进程拷贝，在window中会
# if __name__ == '__main__'作用
# 1、防止windows递归创建子进程的问题，
# 2、防止导入模块执行
if __name__ == '__main__':
    p1 = Process(target=sing,name='sing')
    p2 = Process(target=dance,name='dance')
    p1.start()
    p2.start()
    print(p1.name, p2.name)
    print(p1.pid, p2.pid)
    #获取当前进程的编号
    print('当前进程的PID：',os.getpid())
    print('当前进程的父进程PID：',os.getppid())
    q = Queue(3)

